#include<iostream>
#include<vector>
#include<list>
using namespace std;

// class Solution {
// public:

//     int LastRemaining_Solution(int n, int m) {
//         list<int> l;
//         for(int i=0; i<n; i++)
//         {
//             l.push_back(i);
//         }
//         list<int>::iterator it = l.begin();
//         for(int i=0; i<n-1; i++)
//         {

//         }        
//     }
// };
class Solution {
public:
   int m, n,ret;
   bool vis[1010][1010]={0};
   int dx[4] = { 0,0,1,-1 };
   int dy[4] = { 1,-1,0,0 };
   int dfs(vector<vector<int> >& grid, int i, int j,int cnt)
   {
       for (int k = 0; k < 4; k++)
       {
           int x = i + dx[k], y = j + dy[k];
           if (x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && grid[x][y] == 1)
           {
               grid[x][y] = 2;
               vis[x][y] = true;
               return dfs(grid, x, y,cnt+1);
           }
       }
       return cnt;
   }
   int rotApple(vector<vector<int> >& grid) {
       // write code here

       m = grid.size(), n = grid[0].size(),ret=0;

       for (int i = 0; i < m; i++)
       {
           for (int j = 0; j < n; j++)
           {
               if (grid[i][j] == 2 && !vis[i][j])
               {
                   vis[i][j] = true;
                   ret = max(ret, dfs(grid, i, j, 0));
               }
           }
       }
       for (int i = 0; i < m; i++)
       {
           for (int j = 0; j < n; j++)
           {
               if (grid[i][j] == 1) return -1;
           }
       }
       return ret;
   }
};
//int main()
//{
//	int n;
//	cin >> n;
//	int y, o, u;
//	while (n--)
//	{
//		cin >> y >> o >> u;
//		getchar();
//		int you = min(y,u),ret = 0;
//		if (o > you)
//		{
//			ret = you * 2 + o-you-1;
//		}
//		else
//		{
//			ret = o * 2;
//		}
//		cout << ret << endl;
//	}
//	return 0;
//}